#!/usr/bin/env bash
# ----------------------------------------------------------------------
# Filename	:  17-gm_t_0004_support.sh
# Version	:  1.0
# Date		:  2024/09/30
# Author	:  guoji
# Email		:  guoji@kylinsec.com.cn
# History	:
#
# Function	:  操作系统支持GM/T 0004
# Out		:
#              0 => TPASS
#              1 => TFAIL
#              other=> TCONF
# ----------------------------------------------------------------------

# 测试主题
Title_Env_LTFLIB="操作系统支持GM/T 0004"

## TODO : 个性化,初始化
#   Out : 0=>TPASS
#         1=>TFAIL
#         2=>TCONF
TestInit_LTFLIB() {
    tmp_dir="/tmp"
    return $TPASS
}

## TODO : 清理函数
#   Out : 0=>TPASS
#         1=>TFAIL
#         2=>TCONF
TestClean_LTFLIB() {
    Debug_LLE " rm -f priv.key pub.key readme.txt readme.sig"
    rm -rf priv.key pub.key readme.txt readme.sig
    return $TPASS
}

## TODO : 测试用例集
#   Out : 0=>TPASS
#         1=>TFAIL
#         2=>TCONF
Testsuite_LTFLIB() {
    testcase_1
    return $TPASS
}

## TODO ： 测试操作系统支持GM/T 0004
#
testcase_1() {
    # 1. 使用SM3算法对字符串"abc"进行杂凑计算
    except_value="SM3(stdin)= 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0"
    value=$(echo -n "abc" | openssl dgst -sm3)
    CommRetParse_LTFLIB "使用SM3算法对字符串'abc'进行杂凑计算: echo -n 'abc' | openssl dgst -sm3"
    if [ "${value}" == "${except_value}" ]; then
        OutputRet_LTFLIB "${TPASS}"
        TestRetParse_LTFLIB "计算结果: ${value}与预期值：${except_value}一致"
    else
        OutputRet_LTFLIB "${TFAIL}"
        TestRetParse_LTFLIB "计算结果: ${value}与预期值：${except_value}不一致"
    fi

    # 2. 重复步骤1三次
    for i in {1..3}; do
        value_i=$(echo -n "abc" | openssl dgst -sm3)
        CommRetParse_LTFLIB "第 ${i} 次使用SM3算法对字符串'abc'进行杂凑计算"
        if [ "${value}" == "${value_i}" ]; then
            OutputRet_LTFLIB "${TPASS}"
            TestRetParse_LTFLIB "第 ${i} 次计算结果与初始计算结果一致"
        else
            OutputRet_LTFLIB "${TFAIL}"
            TestRetParse_LTFLIB "第 ${i} 次计算结果与初始计算结果不一致"
        fi
    done

    # 3. 生成SM2私钥
    cd ${tmp_dir}
    openssl ecparam -genkey -name SM2 -out priv.key
    CommRetParse_LTFLIB "生成 SM2 私钥：openssl ecparam -genkey -name SM2 -out priv.key"

    # 4. 生成SM2公钥
    openssl ec -in priv.key -pubout -out pub.key
    CommRetParse_LTFLIB "生成 SM2 公钥：openssl ec -in priv.key -pubout -out pub.key"

    # 5. 创建测试文件
    echo 'test_string' > readme.txt
    CommRetParse_LTFLIB "创建测试文件：echo 'test_string' > readme.txt"

    # 6. 使用SM3算法对readme.txt文件进行签名
    openssl dgst -sm3 -sign priv.key -out readme.sig readme.txt
    CommRetParse_LTFLIB "使用SM3算法对readme.txt文件进行签名：openssl dgst -sm3 -sign priv.key -out readme.sig readme.txt"

    # 7. 使用SM3公钥验证签名
    openssl dgst -sm3 -verify pub.key -signature readme.sig readme.txt
    CommRetParse_LTFLIB "使用SM3公钥验证签名：openssl dgst -sm3 -verify pub.key -signature readme.sig readme.txt"
}

#----------------------------------------------#

source "${LIB_LTFLIB}"
Main_LTFLIB $@
